package com.shrct.businessprocess.purchase;

import com.shrct.businessprocess.organization.RCEmployee;
import com.shrct.businessprocess.project.RCProjectMoney;
import com.shrct.businessprocess.purchase.IHasPurchaseOrderProcess;
import com.shrct.businessprocess.purchase.RCBasePurchaseOrder;
import com.shrct.businessprocess.purchase.RCBasePurchasePayRequest;
import com.shrct.businessprocess.purchase.RCPurchaseOrderPayProcessItem;
import com.shrct.businessprocess.purchase.impl.RCPurchaseOrderPayProcessImpl;
import com.shrct.businessprocess.purchase.proxy.RCPurchaseOrderPayProcessProxy;
import edu.fudan.langlab.domain.workflow.BusinessProcess;
import edu.fudan.mylang.pf.EntityImplementation;
import java.util.Collection;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;

@EntityImplementation(implementBy = RCPurchaseOrderPayProcessImpl.class)
public interface RCPurchaseOrderPayProcess extends BusinessProcess, IHasPurchaseOrderProcess {
  public abstract void start(final RCProjectMoney amount, final RCBasePurchaseOrder purchaseOrder, final String comment);
  
  public abstract void modify_cancel(final String comment);
  
  public abstract void modify_modify(final RCProjectMoney amount, final String comment);
  
  public abstract void salerAudit_agree(final String comment);
  
  public abstract void salerAudit_refuse(final String comment);
  
  public abstract void ceoAudit_agree(final String comment);
  
  public abstract void ceoAudit_refuse(final String comment);
  
  public abstract void financeLeaderAudit_agree(final String comment);
  
  public abstract void financeLeaderAudit_refuse(final String comment);
  
  public abstract void financeManPay_agree(final String comment);
  
  public abstract void financeManPay_refuse(final String comment);
  
  public abstract RCBasePurchaseOrder getPurchaseOrder();
  
  public abstract RCPurchaseOrderPayProcess setPurchaseOrder(final RCBasePurchaseOrder purchaseOrder);
  
  public abstract RCBasePurchasePayRequest getPayRequest();
  
  public abstract RCPurchaseOrderPayProcess setPayRequest(final RCBasePurchasePayRequest payRequest);
  
  public abstract Collection<RCPurchaseOrderPayProcessItem> getItems();
  
  public abstract RCPurchaseOrderPayProcessItem createAndAddtoItems();
  
  public abstract RCPurchaseOrderPayProcessItem createAndAddtoItems(final Procedure1<RCPurchaseOrderPayProcessItem> updater);
  
  public abstract RCPurchaseOrderPayProcess removeFromItems(final RCPurchaseOrderPayProcessItem rCPurchaseOrderPayProcessItem);
  
  public abstract RCPurchaseOrderPayProcess removeAllItems();
  
  public abstract RCEmployee getStarter();
  
  public abstract RCPurchaseOrderPayProcess setStarter(final RCEmployee starter);
  
  public abstract RCPurchaseOrderPayProcessProxy toProxy();
}
